const http = require('https');
const fs = require('fs');
const path = require('path');

// http.get(options[, callback])  // 用于发送get请求

http.get('https://www.vmall.com/product/10086843317852.html', (res) => { // res 响应
    const { statusCode } = res; // 获得http状态码 通过解构语法获得
    const contentType = res.headers['content-type']; // 获得响应的内容类型

    let error; // 新建了一个错误
    // Any 2xx status code signals a successful response but
    // here we're only checking for 200.
    if (statusCode !== 200) { // 如果http状态码不为200 表示请求失败 则新建一个错误对象
        error = new Error('Request Failed.\n' +
            `Status Code: ${statusCode}`);
    } else if (!/^text\/html/.test(contentType)) { // 判断请求到的内容是否是JSON
        // 不是JSON 则新建一个错误对象
        error = new Error('Invalid content-type.\n' +
            `Expected application/json but received ${contentType}`);
    }
    if (error) { // 如果有错误对象
        console.error(error.message); // 输出错误的描述信息
        // Consume response data to free up memory
        res.resume(); // 清除缓存
        return; // 结束
    }

    res.setEncoding('utf8'); // 设置字符集
    let rawData = ''; // 数据
    res.on('data', (chunk) => {
        rawData += chunk;
    }); // 数据响应 拼接数据块
    res.on('end', () => { // 数据响应结束
        fs.writeFile(path.join(__dirname, '..', 'html', 'huawei.html'), rawData, 'utf8', err => {
            if (err) console.log(err);
            console.log('文件写入成功');
        })
    });
}).on('error', (e) => { // 错误事件处理
    console.error(`Got error: ${e.message}`);
});